// 封装一个类似于axios一样的东西

class Request {
  constructor(options){
    this.baseURL = options.baseURL
    if(!this.baseURL){
      throw new Error('请求基准地址必须传入')
    }
    this.beforeRequest = options.beforeRequest
    this.beforeResponse = options.beforeResponse
  }
  // 发起get请求
  // 业务==>get==>beforeRequest==> ajax  去后端获取请求
  async get(url,data={},headers={}){
    // 执行请求拦截器
    if(this.beforeRequest){
      let config = this.beforeRequest({method:'get',url,data,headers})
      if(config){
        return this.ajax(config)
      }else{
        return null
      }
    }else{
       return this.ajax({method:'get',url,data,headers})
    }
  }
  // 发起post请求
  post(url,data={},headers={}){
     // 执行请求拦截器
     if(this.beforeRequest){
      let config = this.beforeRequest({method:'post',url,data,headers})
      if(config){
        return this.ajax(config)
      }else{
        return null
      }
    }else{
      return this.ajax({method:'post',url,data,headers})
    }
  }
  // 发起网络请求
  async ajax(config){
    return new Promise((resolve,reject)=>{
      wx.request({
        url:this.baseURL+config.url,
        method:config.method || 'get',
        data:config.data || {},
        headers:config.headers || {},
        success:res=>{
          // 执行响应拦截器
          if(this.beforeResponse){
            resolve(this.beforeResponse(res)) 
          }else{
            resolve(res)
          }
        },
        fail:()=>{
          console.log(error)
          return reject(new Error('请求出错',error))
        }
      })
    })
  }
}

////////////////////////////////修改下面即可////////////////////////////////////////////
let axios = new Request({
  // 请求基准地址	
  baseURL:"http://122.51.249.55:8360/api",
  // 请求拦截器
  beforeRequest:function(config){
    // 一定要有return config
    return config
  },
  // 响应拦截器
  beforeResponse:function(response){
     // 一定要有return response
     if(response.data.errno){
        wx.showToast({
          title: response.data.errmsg,
          icon:'none'
        })      
     }else{
        return response.data.data
     }
  }
})

export default axios;


